/**
 * 
 */
package oas.db;

import java.util.List;

import javax.servlet.http.HttpSession;

import oas.domain.Leave;
import oas.domain.User;
import oas.web.PaginationSupport;


/**
 * @author jtc
 * @version 1.0.0
 */
public interface LeaveRepository {

	/**
	 * 取得请假数量
	 * 
	 * @return 请假数量
	 */
	long count();

	/**
	 * 依据页码和指定页面大小，返回吐槽列表
	 * @param pageNo 起始位置
	 * @param pageSize 每页数量
	 * @return 分页对象
	 */
	PaginationSupport<Leave> findPage(int pageNo,int pageSize);

	/**
	 * 依据id查找请假
	 * 
	 * @param id
	 *            请假ID
	 * @return 请假信息
	 */
	Leave findOne(long id);

	/**
	 * 新建一个请假
	 * 
	 * @param leave
	 *            请假
	 * @return 以保存的请假
	 */
	Leave save(Leave leave);

	/**
	 * 取得指定请假者的历史请假列表
	 * 
	 * @param UserId
	 *            请假者ID
	 * @return 指定请假者的全部请假
	 */
	List<Leave> findByUserId(long UserId);

	

	/**
	 * 管理员取得所有子部门待审核的请假
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	PaginationSupport<Leave> findPageManager(User handler,int pageNo, int pageSize);
	
	/**
	 * 管理员取得所有子部门已审核的请假
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	PaginationSupport<Leave> findPageCheckedManager(User handler,int pageNo, int pageSize);
	/**
	 * 管理员取得所有子部门的请假的数目
	 * @return
	 */
	long countManager(Long Id);

	/**
	 * 管理员取得所有子部门已通过审核的请假的数目
	 * @return
	 */
	long countCheckedManager(Long Id);

	/**
	 * 请假通过审核
	 * @param handler 
	 * @param id
	 * 		请假 的 id
	 * @param b
	 * 		是否通过审核
	 */
	void checkLeave(User handler, Long id, boolean b);
	
	/**
	 * 依据id查找已审核请假
	 * 
	 * @param id
	 *            请假ID
	 * @return 请假信息
	 */
	Leave findOneChecked(long id);
}
